package annotation;

import java.lang.reflect.Method;

/**
 * @time: 2019/12/4 14:36
 * @author: baozi
 * 注解
 */
//@Deprecated 过时
//@SuppressWarnings()压制警告
//元注解
//@Target()//描述注解作用域
//@Retention()//描述注解保留阶段
//@Documented//注解是否被抽取到api文案
//@Inherited//注解是否被子类继承
@pro(classMethod = "tset1",className = "thread2.people")
public class annotationDemo1 {

    @Deprecated
    @myAnnotation(test="1",test2={"11"},test3=@myAnnotation2)//注解属性值
    public static void aa(){
    }

    @SuppressWarnings("all")//右边不显示警告提示
    public static void bb(){
    }

    public static void main(String[] args) {
        /*aa();
        bb();*/
        /*try {
            //解析注解
            //获取字节码对象
            Class<annotationDemo1> cl=annotationDemo1.class;//获取类
            //获取上面的注解对象
            pro pro=cl.getAnnotation(pro.class);//会在内存中生成改注解的实现子类
            //调用注解对象的抽象方法,获取返回值
            String classMethod=pro.classMethod();
            String className=pro.className();
            //类加载到内存
            Class cs=Class.forName(className);
            //创建对象，无参构造
            Object obj=cs.newInstance();
            //获取方法，执行
            Method method=cs.getMethod(classMethod);
            method.invoke(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }*/

        //获取字节码对象
        runClass r=new runClass();
        Class cla=r.getClass();
        //获取所有方法
        Method[]  methods=cla.getMethods();

        for(Method m:methods){
            //判断方法是否有制定注解
            if(m.isAnnotationPresent(myAnnotation3.class)){
                try {
                    //执行
                    m.invoke(r);
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("暴多的方法名字"+m.getName());
                }
            }

        }


    }
}
